<?php
/**
 * Лог событий, базовые операции: добавление событий, флашинг лога
 *
 * @package default
 * @author Alexander Sibiryakov
 **/
class Logger
{
	private $stack = array();
	private $log_file_name = "events_log";
	private $log_path = "";
	
	/**
	 * Назначит имени файла путь
	 *
	 * @return void
	 * @author Alexander Sibiryakov
	 **/
	public function __construct($save_path) {
		$this->log_path = rtrim($save_path, "/\\")."/".$this->log_file_name;
	}
	
	/**
	 * Если файла нет, то создаст его, если запись запрещена, то выдаст false
	 *
	 * @return boolean
	 * @author Alexander Sibiryakov
	 **/
	public function init() {
		if (file_exists($this->log_path))
		 	if (!is_writable($this->log_path)) return false;

		$handle = fopen($this->log_path, "a");
		if ($handle == false) return false;
		fclose($handle);

		return true;
	}
	
	/**
	 * Сказать, что событие произошло
	 *
	 * @return void
	 * @author Alexander Sibiryakov
	 **/
	public function event(Event $e)
	{
		$this->stack[] = $e;
	}
	
	/**
	 * Сохранить лог
	 *
	 * @return void
	 * @author Alexander Sibiryakov
	 **/
	public function flushLog()
	{
		if (count($this->stack) == 0) return;
		
		$handle = fopen($this->log_path, "a");
		foreach($this->stack as $i=>$event) {
			fwrite($handle, serialize($event)."\n");
		}
		fclose($handle);
		$this->stack = array();
	}
} // END class

/**
 * Класс - событие. Должен уметь возвращать свое, полезное содержимое через getSerialised в виде строки
 * Именно этот класс идет на вход методу event класса Logger
 *
 * @package default
 * @author Alexander Sibiryakov
 **/
class Event
{
	public $time; // unix time
	public $type = '';
	public $openid = '';
	public $oid = 0;
	
	private static $types = array(
		"create_item",
		"delete_item",
		"edit_item",
		"change_item_url",
		"create_comment",
		"delete_comment",
		"edit_comment",
		"create_comment_at_item",
		"create_comment_at_comment"
		);
	
	/**
	 * Конструктор. Инициирует свойства объекта.
	 *
	 * @return void
	 * @author Alexander Sibiryakov
	 **/
	public function __construct($time, $type, $openid, $oid)
	{		
		$this->time = $time;
		$this->type = $type;
		$this->openid = $openid;
		$this->oid = $oid;	
	}
		
} // END class 